package com.baofu.paycore.dal.model;

import com.baofu.paycore.service.facade.enums.PayCoreErrorCode;
import com.google.common.base.Objects;
import com.baofu.paycore.dal.model.base.BaseDO;
import com.system.commons.exception.BizServiceException;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import lombok.extern.slf4j.Slf4j;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 支付主单对象
 *
 * User: xin deng  Date: 16/4/20 ProjectName: paycore Version: 1.0
 */
@Slf4j
@Getter
@Setter
@ToString
@NoArgsConstructor
public class PayDO extends BaseDO implements Comparable{

    /**
     * 支付单号
     */
    private String payNo;

    /**
     * 关联号
     */
    private String relationNo;

    /**
     * 来源系统
     */
    private String requestSystem;

    /**
     * 请求订单号
     */
    private String requestOrderNo;

    /**
     * 业务流水号
     */
    private String requestBizNo;

    /**
     * 业务请求时间
     */
    private Date requestDate;

    /**
     * 终端类型
     * PC WEB WAP SYSTEM
     */
    private String requestChannel;

    /**
     * 付款方账号
     */
    private String payerNo;

    /**
     * 收款方账号
     */
    private String payeeNo;

    /**
     * 业务产品
     */
    private String bizType;

    /**
     * 业务产品明细
     */
    private String subBizType;

    /**
     * 支付金额
     */
    private Long amt;

    /**
     * 币种
     */
    private String ccy;

    /**
     * 汇率
     */
    private BigDecimal rate;

    /**
     * 原始金额
     */
    private Long sourceAmt;

    /**
     * 原始币种
     */
    private String sourceCcy;

    /**
     * 支付状态
     */
    private String status;

    /**
     * 退款金额
     */
    private Long refundAmt;

    /**
     * 扩展大字段
     */
    private String paymentExtra;

    /**
     * 付款方信息
     */
    private String paymentInfo;

    /**
     * 事件号
     */
    private String eventNo;

    /**
     * 备注
     */
    private String description;

    /**
     * 商户号
     */
    private String merchantNo;

    @Override
    public int compareTo(Object o) {
        if (!Objects.equal(o.getClass(), PayDO.class)){
            log.error("支付单类型有误:{}",o.getClass());
            throw new BizServiceException(PayCoreErrorCode.VALUE_NOT_SUPPORT, "支付单类型有误:"+o.getClass());
        } else {
            PayDO m = (PayDO) o;
            if (this.getUpdatedAt().after(m.getUpdatedAt()))
                return -1;
            else if (this.getUpdatedAt().before(m.getUpdatedAt()))
                return 1;
            else
                return 0;
        }
    }
}
